本指南介绍如何使用Spring Session透明地利用Redis来通过Java配置来回退Web应用程序的HttpSession。
完成的指南可以在httpsession sample application中找到。
Updating Dependencies
在使用Spring Session之前,必须确保更新依赖项。 如果您使用Maven,请确保添加以下依赖项:
pom.xml
|
|
Spring Java Configuration
添加所需的依赖项后,我们可以创建我们的Spring配置。 Spring配置负责创建一个Servlet过滤器,它用Spring Session支持的实现替换HttpSession实现。 添加以下Spring配置:
|
|
@EnableRedisHttpSession
注释创建一个名为springSessionRepositoryFilter
的Spring Bean,它实现了Filter。 过滤器是负责替换HttpSession
实现由Spring Session支持。 在这个例子中,Spring Session由Redis支持。
我们创建一个RedisConnectionFactory
,将Spring Session连接到Redis服务器。 我们配置连接以连接到默认端口(6379)上的localhost有关配置Spring Data Redis的更多信息,请参考reference documentation。
Java Servlet容器初始化
我们的 Spring Configuration 创建了一个Spring Bean,名为springSessionRepositoryFilter
,它实现了Filter。 springSessionRepositoryFilter
bean负责用Spring Session支持的自定义实现替换HttpSession。
为了使我们的Filter
能够做到这一点,Spring需要加载我们的Config
类。 最后,我们需要确保我们的Servlet容器(即Tomcat)对于每个请求使用我们的springSessionRepositoryFilter
。 幸运的是,Spring Session提供了一个名为AbstractHttpSessionApplicationInitializer
的实用程序类,这两个步骤都非常容易。 你可以找到一个例子:
src/main/java/sample/Initializer.java
|
|
我们的类的名字(Initializer)没关系。 重要的是我们扩展AbstractHttpSessionApplicationInitializer。
第一步是扩展AbstractHttpSessionApplicationInitializer
。 这确保Spring Bean的名称为springSessionRepositoryFilter
,为每个请求的Servlet容器注册。AbstractHttpSessionApplicationInitializer
还提供了一种机制,以轻松确保Spring加载我们的Config
。
httpsession示例应用程序
运行httpsession示例应用程序
您可以通过获取 source code并调用以下命令来运行示例:
要使样本工作,必须在localhost上安装install Redis 2.8+,并使用默认端口(6379)运行它。 或者,您可以更新LettuceConnectionFactory以指向Redis服务器。
|
|
您现在应该可以访问http://localhost:8080/
探索httpsession示例应用程序
尝试使用应用程序。 使用以下信息填写表单:
Attribute Name:username
Attribute Value:rob
现在单击Set Attribute按钮。 现在应该可以看到表中显示的值。
How does it work?
我们在SessionServlet
中与标准HttpSession
进行交互,如下所示:
src/main/java/sample/SessionServlet.java
|
|
而不是使用Tomcat的HttpSession
,我们实际上是在Redis中保留值。 Spring会在您的浏览器中创建一个名为SESSION的cookie,其中包含会话的ID。 继续并查看Cookie(点击获取Chrome或Firefox的帮助)。
如果你喜欢,你可以很容易地删除会话使用redis-cli。 例如,在基于Linux的系统上,您可以输入:
|
|
Redis文档中有关于installing redis-cli的说明。
或者,你也可以删除显式键。 在终端输入以下内容,确保用你的SESSION cookie的值替换7e8383a4-082c-4ffe-a4bc-c40fd3363c5e
:
|
|
现在访问http://localhost:8080/ 的应用程序,并观察我们添加的属性不再显示。
注:翻译自http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession.html